package com.mobsword.ac3msn.managers {
	import com.mobsword.ac3msn.constants.Command;
	import com.mobsword.ac3msn.data.Message;
	import com.mobsword.ac3msn.events.RadioEvent;
	import com.mobsword.ac3msn.objects.Account;
	
	/**
	* ...
	* @author Default
	*/
	public class AccountManager extends Manager
	{
		
		public function AccountManager(a:Account)
		{
			super(a);
		}
		
		override protected function onIncoming(event:RadioEvent):void
		{
			switch (event.data.command)
			{
			case Command.GTC:	//대화 허용 상대 리스트에 없는 누군가가 사용자를 대화상대 목록에 추가한 상태라면 A, 그렇지 않다면 N
				break;
			case Command.BLP:	//메신저의 대화상대들이 사용자의 온라인 상태를 알 수 있고 대화 세션을 열 수 있다면 AL, 그렇지 않고 세션도 열 수 없다면 BL
				break;
			case Command.PRP:	//사용자정보. Friendly Name을 수정할 수 있다.
				onPRP(event.data);
				break;
			case Command.BPR:	//PRP와 비슷하지만 정확한 용도는 모르겠다.
				break;
			}
		}
		
		private function onPRP(m:Message):void
		{
			switch (m.param[0])
			{
			case Command.MFN:
				account.data.nick = m.param[1] as String;
				break;
			case Command.MBE:
				break;
			case Command.WWE:
				break;
			}
		}
		
/* 		override protected function onIncoming(event:RadioEvent):void
		{
			//switch (event.data.command)
			//{
			//case Command.LSIN:
				//onLSIN(event.data);
				//break;
			//case Command.CONF:
				//onCONF(event.data);
				//break;
			//case Command.ONST:
				//onONST(event.data);
				//break;
			//case Command.CNIK:
				//onCNIK(event.data);
				//break;
			//}
		}
		
		private function onLSIN(m:Message):void
		{
			account.data.name	= Codec.decode(m.param[1] as String);
			account.data.nick	= Codec.decode(m.param[2] as String);
			account.data.ticket	= m.param[5] as String;
		}
		
		private function onCONF(m:Message):void
		{
			;
		}
		
		private function onONST(m:Message):void
		{
			
			var ae:AccountEvent = new AccountEvent(AccountEvent.STATE_CHANGE);
			ae.account = account;
			ae.old_value = account.data.state;
			
			account.data.state = account.radio.AOD(m.rid.toString()).data.param[0] as String;

			//	dispatch Event for external Interface
			ae.new_value = account.data.state;
			account.dispatchEvent(ae);
		}
		
		private function onCNIK(m:Message):void
		{
			var ae:AccountEvent = new AccountEvent(AccountEvent.NICK_CHANGE);
			ae.account = account;
			ae.old_value = account.data.nick;
			
			account.data.nick = Codec.decode(account.radio.AOD(m.rid.toString()).data.param[0] as String);

			//	dispatch Event for external Interface
			ae.new_value = account.data.nick;
			account.dispatchEvent(ae);
		} */
	}
	
}